﻿/**
 * Create in 2012-4-3.
 */
package kit4j.common.task;

import kit4j.common.task.event.TaskStateChangeListener;

/**
 * 任务接口。
 * 
 * @author MiniKnife
 *
 */
public interface Task {
	
	/**
	 * 添加指定的任务状态变化监听器，以接收该任务的状态变化事件。
	 * @param listener 要添加的任务状态变化监听器
	 */
	public void addTaskStateChangeListener(TaskStateChangeListener listener);
	
	/**
	 * 移除指定的任务状态变化监听器，以便它不再接收该任务的状态变化事件。
	 * @param listener 要移除的任务状态变化监听器
	 */
	public void removeTaskStateChangeListener(TaskStateChangeListener listener);
	
	/**
	 * @return 在该任务上注册的所有任务状态变化监听器的数组。
	 */
	public TaskStateChangeListener[] getTaskStateChangeListeners();

	/**
	 * 启动任务。
	 */
	public void start();
	
	/**
	 * 暂停/挂起任务。
	 */
	public void pause();
	
	/**
	 * 继续任务。
	 */
	public void resume();
	
	/**
	 * 停止/结束任务。
	 */
	public void stop();
	
	/**
	 * 重新开始任务(放弃当前进度)。
	 */
	public void restart();
	
	/**
	 * @return 当前任务状态。
	 */
	public TaskState getTaskState();
	
	/**
	 * @return 当前任务的描述信息。
	 */
	public String getDescription();
	
}
